part of '../animation.dart';

/// 通常遥控器的值是均匀变化的(y=x)
/// 如果要产生变速运动，那么就要让它关联不同的曲线，以此来改变运动速度
/// https://api.flutter.dev/flutter/animation/Curves-class.html
extension Value on AnimationController {
  double valueWith([Curve curve = Curves.linear]) {
    assert(value >= 0 && value <= 1);
    return curve.transform(value);
  }

  // 常用曲线
  /// 两头慢，中间快（平滑）
  double get valueSmooth => valueWith(Curves.easeInOutQuad);

  /// 两头慢，中间快（极端）
  double get valueFlash => valueWith(Curves.easeInOutQuart);

  /// 像弹簧一样拥有惯性（会小于0和大于1，有时候会因此报错）
  /// 其他特性和Flash一样
  double get valueSpring => valueWith(Curves.easeInOutBack);

  double get valueJump => valueWith(Curves.elasticOut);
  double get valueRush => valueWith(Curves.fastOutSlowIn); // 备选：easeOutCubic
  double get valueElegant => valueWith(Curves.easeOutCubic); // 前面慢，后面快
}
